/**
 * 聊天相关类型定义
 * 参考hzsparrow-ai项目的设计，提供统一的类型接口
 */

/**
 * 聊天请求参数，直接匹配后端QuestionVO格式
 */
export interface ChatRequest {
  /** 用户唯一标识 */
  userId?: number
  /** 会话唯一标识 */
  sessionId?: string
  /** 对话索引 */
  contentIndex?: number
  /** 用户输入的消息内容 */
  message: string
  /** 使用的模型ID */
  modelId: number
  /** 上传的文件列表，以Base64编码字符串表示 */
  filebase64s?: string[]
  /** 是否启用联网搜索功能 */
  networking?: boolean
  /** 是否开启记忆 */
  memory?: boolean
  /** 系统提示词模板 */
  systemPrompt?: string
  /** 是否是新会话 */
  newChat?: boolean
  /** 知识库id */
  knowledgeId?: number
  /** 是否使用工具 */
  useTools?: boolean
  /** 温度参数，控制输出的随机性 */
  temperature?: number
  /** 最大生成token数 */
  maxTokens?: number
  /** Top-p参数，控制输出的多样性 */
  topP?: number
}

/**
 * 增强的聊天响应
 */
export interface EnhancedChatResponse {
  /** 是否成功 */
  success: boolean
  /** 响应数据 */
  data?: any
  /** 消息 */
  message?: string
  /** 会话ID */
  sessionId?: string
  /** 时间戳 */
  timestamp?: number
}

/**
 * 流式聊天回调函数
 */
export interface StreamCallbacks {
  /** 收到消息时的回调 */
  onMessage?: (data: any) => void
  /** 发生错误时的回调 */
  onError?: (error: Error) => void
  /** 流式完成时的回调 */
  onComplete?: () => void
}

/**
 * 聊天消息类型
 */
export interface ChatMessage {
  /** 消息ID */
  id: string
  /** 消息内容 */
  content: string
  /** 消息类型：user/assistant/system */
  type: 'user' | 'assistant' | 'system'
  /** 发送者 */
  sender?: 'user' | 'AI'
  /** 时间戳 */
  timestamp: number
  /** 会话ID */
  sessionId?: string
  /** 是否正在流式传输 */
  isStreaming?: boolean
  /** 消息状态 */
  status?: 'thinking' | 'streaming' | 'completed' | 'error'
  /** 模型名称 */
  model?: string
  /** 思考过程 */
  thinking?: string
  /** 图片列表 */
  images?: any[]
  /** 文档列表 */
  documents?: any[]
  /** 错误信息 */
  error?: string
  /** 消息索引 */
  contentIndex?: number
  /** 元数据 */
  metadata?: {
    modelId?: number
    model?: string
    tokens?: number
    temperature?: number
    [key: string]: any
  }
}

/**
 * 聊天会话信息
 */
export interface ChatSession {
  /** 会话ID */
  id: string
  /** 会话标题 */
  title: string
  /** 创建时间 */
  createdAt: number
  /** 最后活跃时间 */
  lastActiveAt: number
  /** 消息数量 */
  messageCount: number
  /** 用户ID */
  userId?: number
  /** 是否置顶 */
  pinned?: boolean
  /** 标签 */
  tags?: string[]
}

/**
 * 聊天配置
 */
export interface ChatConfig {
  /** 默认模型 */
  defaultModel: string
  /** 当前模型ID */
  currentModelId?: number
  /** 温度参数 */
  temperature: number
  /** 最大token数 */
  maxTokens: number
  /** Top-p参数 */
  topP: number
  /** 是否启用记忆功能 */
  enableMemory: boolean
  /** 是否启用流式传输 */
  enableStreaming: boolean
  /** 是否启用工具功能 */
  enableTools?: boolean
  /** 支持的模型列表 */
  supportedModels: string[]
  /** 知识库配置 */
  knowledgeBase?: {
    enabled: boolean
    defaultIndex?: string
  }
}

/**
 * 聊天统计信息
 */
export interface ChatStatistics {
  /** 总消息数 */
  totalMessages: number
  /** 总会话数 */
  totalSessions: number
  /** 今日消息数 */
  todayMessages: number
  /** 平均响应时间 */
  averageResponseTime: number
  /** 成功率 */
  successRate: number
}

/**
 * 聊天工具定义
 */
export interface ChatTool {
  /** 工具ID */
  id: string
  /** 工具名称 */
  name: string
  /** 工具描述 */
  description: string
  /** 工具参数 */
  parameters?: any
  /** 是否启用 */
  enabled: boolean
}

/**
 * 知识库文档
 */
export interface KnowledgeDocument {
  /** 文档ID */
  id: string
  /** 文档标题 */
  title: string
  /** 文档内容 */
  content: string
  /** 文档类型 */
  type: string
  /** 索引名称 */
  indexName: string
  /** 创建时间 */
  createdAt: number
  /** 更新时间 */
  updatedAt: number
  /** 元数据 */
  metadata?: {
    source?: string
    author?: string
    [key: string]: any
  }
}

/**
 * 聊天错误类型
 */
export interface ChatError {
  /** 错误代码 */
  code: string
  /** 错误消息 */
  message: string
  /** 错误详情 */
  details?: any
  /** 是否可重试 */
  retryable: boolean
}

/**
 * 聊天事件类型
 */
export type ChatEventType = 
  | 'message_sent'
  | 'message_received'
  | 'stream_start'
  | 'stream_chunk'
  | 'stream_end'
  | 'error_occurred'
  | 'session_created'
  | 'session_updated'
  | 'session_deleted'

/**
 * 聊天事件
 */
export interface ChatEvent {
  /** 事件类型 */
  type: ChatEventType
  /** 事件数据 */
  data: any
  /** 时间戳 */
  timestamp: number
  /** 会话ID */
  sessionId?: string
  /** 用户ID */
  userId?: number
}

/**
 * 聊天历史记录
 */
export interface ChatHistory {
  /** 会话ID */
  sessionId: string
  /** 消息列表 */
  messages: ChatMessage[]
  /** 会话信息 */
  session: ChatSession
  /** 统计信息 */
  statistics?: ChatStatistics
}

/**
 * 聊天状态
 */
export interface ChatState {
  /** 当前会话ID */
  currentSessionId: string | null
  /** 消息列表 */
  messages: ChatMessage[]
  /** 会话列表 */
  sessions: ChatSession[]
  /** 是否正在加载 */
  isLoading: boolean
  /** 是否正在流式传输 */
  isStreaming: boolean
  /** 配置信息 */
  config: ChatConfig
  /** 错误信息 */
  error: ChatError | null
  /** 统计信息 */
  statistics: ChatStatistics
}